iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
DevOps

DevOps需要的技能樹...(應該)都點得到!系列 第 7

Day 7: Kubernetes Pod 與 Deployment 深入解析

  • 分享至 

  • xImage
  •  

本章節「Kubernetes (k8s)」概要

Day 5: Kubernetes 基本架構及安裝
Day 6: 使用 kubectl 指令管理 Kubernetes 集群
Day 7: Kubernetes Pod 與 Deployment 深入解析
Day 8: Kubernetes Service 與負載均衡機制
Day 9: Kubernetes Persistent Volumes (PV) 與 Persistent Volume Claims (PVC)

認識部署單位

Kubernetes 中,Pod 是最小的可部署單位,通常包含一個或多個緊密相關的容器,共享網絡和存儲資源。Pod 是短暫的,Kubernetes 通常使用 Deployment 來管理 Pod 的生命週期。Deployment 允許聲明應用的期望狀態(如所需的 Pod 數量、容器映像版本等),並負責持續監控和確保應用達到該狀態。這使得應用程序的部署、滾動更新、回滾和自動擴展變得簡單和可靠。

上一篇試做之後應該還有點霧煞煞,這篇要來手寫部署文件

建立deployment.yml文件

建立目錄跟開啟編輯器應該不用再提醒了吧!

#建立目錄
mkdir apache
cd apache
sudo nano deployment.yml

貼入以下內容

apiVersion: apps/v1
kind: Deployment
metadata:
  #這裡宣告的deployment名稱待會會用到
  name: apache-deployment
  labels:
    app: apache
spec:
  replicas: 3  # 指定運行的 Pod 副本數量
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      #這裡宣告的app名稱待會也會用到
      - name: apache
        image: httpd:2.4  # 使用 Apache HTTP 伺服器的 Docker 映像
        ports:
        - containerPort: 80  # 對外暴露的容器端口

建立了完整的deployment.yml文件之後
再用套用指令,去吃到這個文件

kubectl apply -f deployment.yml

此時一樣可以觀察到服務已經起來

#查看deployment
kubectl get deployments
#查看app=apache的這個服務,剛才有宣告,並且可見pod數為3
kubectl get pods -l app=apache

https://ithelp.ithome.com.tw/upload/images/20240803/20168384uwe6gXYbkW.jpg

滾動更新

剛才我們在deployment.yml裡面採用的版本是2.4
以下指令可通過滾動更新,將容器運行的映像檔版本更新為2.4.51版本

#滾動更新
kubectl set image deployment/apache-deployment apache=httpd:2.4.51
#查看狀態
kubectl rollout status deployment/apache-deployment

https://ithelp.ithome.com.tw/upload/images/20240803/20168384sJoBLyLrEw.jpg

回滾版本

當更新不可用,需要退回到上一版本

kubectl rollout undo deployment/apache-deployment

同場加映1:擴容

當服務超過負載時,常見需要水平擴容的場合

kubectl scale --replicas=5 deployment/apache-deployment
#檢查pod數量上限,顯示為5/5
kubectl get deployment
#檢查pod數具體是否增加
kubectl get pod

https://ithelp.ithome.com.tw/upload/images/20240803/201683847DlYz4dgfu.jpg

同場加映2:批量操作

想一次擴容或關閉全部服務,需要手動一個一個操作嗎?
記得將-n參數換作你部署在的namespace名稱

#將所有pod副本數降為0
kubectl scale deployment -n default --all --replicas=0
#將所有pod副本數升為5
kubectl scale deployment -n default --all --replicas=5

至此,針對pod的操作就有一定的熟悉度了!
不過,這個時候的apache還訪問不到喔!因為少了什麼?下一篇會說明


上一篇
Day 6: 使用 kubectl 指令管理 Kubernetes 集群
下一篇
Day 8: Kubernetes Service 與負載均衡機制
系列文
DevOps需要的技能樹...(應該)都點得到!25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言